using Volo.Abp.Application.Services;
using WL.Think.Abp.Dto;

namespace WL.Think.Abp.Services;

/// <summary>
/// 基础应用服务
/// </summary>
public interface IThinkAppService : IApplicationService
{
}


/// <summary>
/// 基础应用服务
/// </summary>
/// <typeparam name="TGetOutputDto">实体对应DTO</typeparam>
/// <typeparam name="TGetListInput">分页查询DTO</typeparam>
/// <typeparam name="TCreateInput">创建实体DTO</typeparam>
/// <typeparam name="TUpdateInput">更新实体DTO</typeparam>
public interface IThinkAppService<TGetOutputDto, TGetListInput, TCreateInput, TUpdateInput> : 
    ICrudAppService<TGetOutputDto, Guid, TGetListInput, TCreateInput, TUpdateInput>,
    IThinkAppService
    where TGetListInput : BasePagedDto
    where TCreateInput : class
    where TUpdateInput : class
{

}

/// <summary>
/// 基础应用服务
/// </summary>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="TGetOutputDto">实体对应DTO</typeparam>
/// <typeparam name="TGetListInput">分页查询DTO</typeparam>
/// <typeparam name="TCreateInput">创建实体DTO</typeparam>
public interface IThinkAppService<TGetOutputDto, TGetListInput, TCreateInput> : 
    IThinkAppService<TGetOutputDto, TGetListInput, TCreateInput, TCreateInput> 
    where TGetListInput : BasePagedDto
    where TCreateInput : class
{

}


/// <summary>
/// 基础应用服务
/// </summary>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="TGetOutputDto">实体对应DTO</typeparam>
/// <typeparam name="TGetListInput">分页查询DTO</typeparam>
public interface IThinkAppService<TGetOutputDto, TCreateInput> : 
    IThinkAppService<TGetOutputDto, BasePagedDto, TCreateInput> 
    where TCreateInput : class
{
}


/// <summary>
/// 基础应用服务
/// </summary>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="TGetOutputDto">实体对应DTO</typeparam>
public interface IThinkAppService<TGetOutputDto> : 
    IThinkAppService<TGetOutputDto, TGetOutputDto> 
    where TGetOutputDto : class
{
}
